﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;

namespace ETRoboConTrackingSLServer
{
    public interface IETRoboConMgmtSL
    {
        [OperationContract]
        bool GetContestInfos(out ContestInfoSL[] contests);

        /// <summary>
        /// contestIdで指定されたコンテストに属するGame情報を返す
        /// </summary>
        /// <param name="contestId"></param>
        /// <param name="games"></param>
        /// <returns>指定されたコンテストが存在すればtrueを、存在しなければfalseを返す</returns>
        [OperationContract]
        bool GetGameInfos(int contestId, out GameInfoSL[] games);

        /// <summary>
        /// 指定された試合結果を返す。
        /// </summary>
        /// <param name="gameId">取得したい試合のId</param>
        /// <param name="isTotalResultPoint">全ラウンドのリザルトタイムを総合した値を取得するかを指定する。
        /// trueの場合は全指定、falseの場合は変数roundで指定した値のみの取得を指定。</param>
        /// <param name="round">isTotalResultPointがfalseの時、本変数で指定されたラウンドのみの値を取得</param>
        /// <param name="results">各チームの競技結果</param>
        /// <returns>該当するgameId、roundが存在すればtrueを返し、それ以外はfalseを返す。</returns>
        [OperationContract]
        bool GetEntryTeamResults(int gameId, bool isTotalResultPoint, int? round, out EntryTeamResultSL[] results);
    }

    [DataContract]
    public class ContestInfoSL
    {
        [DataMember]
        public int ContestId { get; set; }
        [DataMember]
        public string ContestName { get; set; }
        [DataMember]
        public int Year { get; set; }
    }

    [DataContract]
    public class GameInfoSL
    {
        [DataMember]
        public int GameId { get; set; }
        [DataMember]
        public string GameName { get; set; }
    }
    [DataContract]
    public class EntryTeamResultSL
    {
        /// <summary>
        /// ゼッケン番号
        /// </summary>
        [DataMember]
        public int Bib { get; set; }
        /// <summary>
        /// 事務局管理の通し番号Id
        /// </summary>
        [DataMember]
        public int TeamId { get; set; }
        /// <summary>
        /// チーム名
        /// </summary>
        [DataMember]
        public string TeamName { get; set; }
        /// <summary>
        /// 全ラウンドのリザルトタイムの総合ポイントとモデル評価ポイントを元に計算した総合順位
        /// 未計算の場合は、null
        /// </summary>
        [DataMember]
        public int? Rank { get; set; }
        /// <summary>
        /// リザルトタイムを格納。
        /// 該当する値がなければnull
        /// </summary>
        [DataMember]
        public int? ResultTime { get; set; }
    }
}
